package cn.demomaster.quickdb.utils;

import java.text.SimpleDateFormat;
import java.util.Date;

public class SqlValueFormatter {
    /**
     * 将 Object 转换为 SQL 语句中的值。
     *
     * @param value 需要转换的对象
     * @return 格式化后的 SQL 值字符串
     */
    public static String toSqlValue(Object value) {
        if (value == null) {
            return "NULL";
        }

        // 检查是否为字符串类型
        if (value instanceof String) {
            return "'" + escapeSqlString(value.toString()) + "'";
        }

        // 检查是否为布尔类型
        if (value instanceof Boolean) {
            return ((Boolean) value) ? "1" : "0"; // SQLite 使用 1 和 0 表示布尔值
        }

        // 检查是否为日期时间类型
        if (value instanceof java.util.Date) {
            // 根据你的需求选择日期格式
            return "'" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(value) + "'";
        }

        // 其他数值类型直接转换为字符串
        return value.toString();
    }

    public static String toSqlValue(Integer value) {
        return String.valueOf(value);
    }
    /**
     * 对 SQL 字符串进行转义。
     *
     * @param str 需要转义的字符串
     * @return 转义后的字符串
     */
    private static String escapeSqlString(String str) {
        if (str == null || str.isEmpty()) {
            return str;
        }
        StringBuilder sb = new StringBuilder();
        for (char c : str.toCharArray()) {
            switch (c) {
                case '\'': // 单引号转义为两个单引号
                    sb.append("''");
                    break;
                default:
                    sb.append(c);
            }
        }
        return sb.toString();
    }
}
